﻿@{
    Task task = ViewBag.Task;
    int? currentSimId = null, relatedToEmpId = null, createdByEmpId = null;
    int applyToEmpId, appPrcGrpId, appPrcId;
    DateTime? calApproveWhen = null;
    Employee applyToEmployee= null, createdByEmployee = null;
    ApproveProcess appPrc;
    IEnumerable<TaskHistory> taskHistories = new List<TaskHistory>();
    ICollection<ApprovePathSimulate> simulates = null;
    IEnumerable<Employee> emps;
    List<ExecutivePosition> execPos = null;
    GERPContext context = new GERPContext(true);
    execPos = context.ExecutivePositions.Where(o => o.RecordStatus != "D").ToList(); 
    if(task != null)
    {
        currentSimId = task.CurrentTaskHistory != null ? task.CurrentTaskHistory.SimId : null;
        taskHistories = task.TaskHistories;

        applyToEmpId = task.ApplyToEmpId;
        appPrcId = task.AppPrcId;
        appPrcGrpId = task.ApproveProcess.AppPrcGrpId;
        appPrc = task.ApproveProcess;
        applyToEmployee = task.ApplyToEmployee;
        createdByEmployee = task.CreateByEmployee;
        calApproveWhen = task.CreatedWhen;
        simulates = task.Simulates;
    } else
    {
        var service = new KPIS.GERP.WEB.GIMS.SysApprovalService.SysApprovalServiceClient();
        applyToEmpId = ViewBag.ApplyToEmpId ?? ConvertUtility.ConvertOrDefaultObjectInt(Request["ApplyToEmpId"]);
        createdByEmpId = ViewBag.createdByEmpId ?? ConvertUtility.ConvertOrDefaultObjectInt(Request["createdByEmpId"]);
        appPrcId = ViewBag.AppPrcId ?? ConvertUtility.ConvertOrDefaultObjectInt(Request["AppPrcId"]);
        appPrcGrpId = ViewBag.AppPrcId ?? ConvertUtility.ConvertOrDefaultObjectInt(Request["AppPrcGrpId"]);

        if (appPrcId == 0)
        {
            appPrcId = (from ap in service.SelectApproveProcess(appPrcGrpId).Where(o => o.IsDefaultProcess) select ap.AppPrcId).FirstOrDefault();
        }
        
        relatedToEmpId = ViewBag.relatedToEmpId ?? ConvertUtility.ConvertOrDefaultObjectInt(Request["relatedToEmpId"]); 
        appPrc = context.ApproveProcesses.First(o => o.AppPrcId == appPrcId);
        applyToEmployee = context.Employees.First(o => o.EmpId == applyToEmpId);
        calApproveWhen = DateTime.Now;
        createdByEmployee = context.Employees.FirstOrDefault(o => o.EmpId == createdByEmpId);
        simulates = service
            .LoadApprovePathSimulate2(applyToEmpId, relatedToEmpId, createdByEmpId, appPrcId).ToList();
    }
    
    if(ViewBag.Emps as IEnumerable<Employee> == null)
    {
        emps = context.Employees.Include(o => o.Position.WorkingUpperPosition)
            .Include(o=>o.Position.ExecutivePosition).Where(o => o.RecordStatus != RecordStatus.DeletedStatus);
    } else
    {
        emps = ViewBag.Emps;
    }

}
                        
<div class="control-group" > 
    <h4 class="header bigger lighter blue">
        ขั้นตอนการอนุมัติประเภท <span class="lighter red" style="text-decoration: underline">[@appPrcId] @appPrc.Name</span>&nbsp;
    </h4>
    <table style="width: 100%; margin-bottom: 20px;">
        <tr>
            <td style="width:200px; text-align: right;">
                สำหรับผู้ขอ
            </td>
            <td>
                <i class="text-info">
                @(applyToEmployee != null ? applyToEmployee.FullName : (createdByEmployee != null ? createdByEmployee.FullName :""))
            </i>
            </td>
        </tr>
        <tr>
            <td style="text-align: right;">
                คำนวนสายอนุมัติ เมื่อ
            </td>
            <td>
                <i class="text-info">
                @(calApproveWhen.HasValue ? calApproveWhen.Value.ToString("d MMMM yyyy HH:mm:ss") :"")
            </i>
            </td>
        </tr>
    </table> 
    <table id="table1" class="table table-striped table-bordered table-hover" aria-describedby="table_info" width="100%">
            <thead>
                <tr>
                    <th style="text-align: center; font-weight: bold;">#
                    </th>
                    <th style="text-align: center; font-weight: bold;">ขั้น
                    </th>
                    <th style="text-align: center; font-weight: bold;">ประเภทผู้อนุมัติ
                    </th>
                    <th style="text-align: center; font-weight: bold;">ตำแหน่งตามสายบังคับบัญชา
                    </th>
                    <th style="text-align: center; font-weight: bold;">ชื่อสกุล
                    </th>
                    <th style="text-align: center; font-weight: bold;">สิทธิ์
                    </th>
                </tr>
            </thead>
            <tbody>
                @foreach (var simulate in simulates)
                {
                    var emp = emps.FirstOrDefault(o => o.PosId == simulate.ApproverPosId && o.RecordStatus != "D");
                    
                    
                    if (!simulate.AppPathStepNo.HasValue)
                    {
                        <tr>
                            <td colspan="8">@simulate.SimId - @(emp != null ? emp.FullName : "") (ผู้ขอ)</td>
                        </tr>
                    }
                    else
                    {
                        <tr>
                            <td>
                                @if(currentSimId == simulate.SimId)
                                {
                                    <img src="~/Content/Images/Icon/arrow-31-512.gif" width="16px" 
                                            height="16px" title="กำลังอยู่ในขั้นตอนนี้" />
                                }
                            </td>
                            <td style="width:30px">
                                 
                                <span title="ลำดับที่#@simulate.SimulateStepNo @(simulate.SimId == currentSimId ? "(กำลังอยู่ในขั้นตอนนี้)":""), AppPrcId[@simulate.ApprovePath.AppPrcId]">
                                    @simulate.SimulateStepNo 
                                </span>
                            </td> 
                            <td>
                                <span>
                                    @switch (simulate.ApproverType)
                                    {
                                        case ApproverType.Position:
                                            @Html.Raw("โดยตำแหน่ง")<br />
                                            break;
                                        case ApproverType.JobSiteHead:
                                            @Html.Raw("หัวหน้าสำนัก")<br />
                                            break;
                                        case ApproverType.ExecPositionGroup:
                                            @Html.Raw("ตำแหน่งบริหาร")<br />
                                            break;
                                        case ApproverType.PositionGroup:
                                            @Html.Raw("กลุ่มตำแหน่ง")<br />
                                            break;
                                        case ApproverType.FieldApplyTo:<span>ผู้นำไปใช้</span>break;
                                        case ApproverType.FieldRelatedTo:<span>ผู้ที่เกี่ยวข้อง</span>break;
                                        default:<span>@simulate.ApproverType.ToString()</span>break;
                                    }
                                </span>
                            </td>
                            <td>
                                @{
                                    ExecutivePosition ep = null;
                                }
                                @if(simulate.ApproverType != ApproverType.ExecPositionGroup ||
                                    (ep = execPos.FirstOrDefault(o=>o.ExecPosId == simulate.ApprovePath.ExecPosId)) == null)
                                {
                                    @:@(emp != null && emp.Position != null ? emp.Position.Name : "")
                                } else 
                                {
                                    @ep.Name
                                }
                            </td>
                            <td>
                                @(emp != null ? emp.FullName : "")
                            </td>
                            @{
                                var thOfSim = taskHistories.FirstOrDefault(o => o.SimId == simulate.SimId);
                                /* action code :  
                                    // โดยระบบ
                                    Initial = 0, // เพิ่งเริ่ม

                                    // โดยผู้บังคับบัญชา
                                    Approve = 1, // อนุมัติ
                                    Forward = 2, // ส่งต่อไปขั้นตอนข้างหน้า 1 ขั้นตอน (ไม่ให้เลือก เว้นแต่ขั้นตอนนี้ผู้อนุมัติเป็น JobSite หรือ Team)
                                    Reject = 3, // ไม่ผ่านการอนุมัติ ข้อความจะไม่ผ่านการอนุมัติไปทางสายที่ผ่านมาแต่ละขั้นตอนทุกคน (Optional) ไม่สามารถนำคำขอเดิมกลับมาใช้ได้อีก
                                    Pending = 4, // พักคำขอ (โดย ผู้อนุมัติ)
                                    Information = 5, // ขั้นตอนเพื่อส่งข้อความอย่างเดียว
                                    SendBack = 6, // ไม่ผ่านการอนุมัติ พร้อมเหตุผล และ

                                    // โดยผู้ดูแลระบบ
                                    Lock = 7, // หยุดคำขอ (โดย ระบบ หรือ Admin)
                                    // และ Cancel = 8, // ยกเลิกคำขอ (โดยผู้ขอ - ทำระหว่างขออนุมัติ)

                                    // โดยผู้ขอ ผู้ดูแลระบบ
                                    Cancel = 8, // ยกเลิกคำขอ (โดยผู้ขอ - ทำระหว่างขออนุมัติ)

                                    // โดยสายบังคับบัญชา และผู้ขอ และหัวหน้าสูงสุด
                                    TakeBack = 9, // ยกเลิกคำขอ (โดยผู้ขอ - ทำระหว่างขออนุมัติ)
                                    */
                            }

                            <td>
                                @if (simulate.IsApproveAble)
                                {
                                    <span class="dark"></span>
                                    <span class="recordstatus-A">
                                        @(thOfSim != null && thOfSim.ActionCode == "Approve" ? "[":"")
                                        อนุมัติ
                                        @(thOfSim != null && thOfSim.ActionCode == "Approve" ? "]":"")
                                    </span>
                                }
                                @if (simulate.IsForwardable)
                                {
                                    <span class="recordstatus-F">
                                        @(thOfSim != null && thOfSim.ActionCode == "Forword" ? "[":"")
                                        ส่งต่อ
                                        @(thOfSim != null && thOfSim.ActionCode == "Forword" ? "]":"")
                                    </span>
                                }
                                @if (simulate.IsRejectable)
                                {
                                    <span class="recordstatus-J">
                                        @(thOfSim != null && thOfSim.ActionCode == "Reject" ? "[":"")
                                        ไม่ผ่านการอนุมัติ
                                        @(thOfSim != null && thOfSim.ActionCode == "Reject" ? "]":"")
                                    </span>
                                }
                                @if (simulate.IsSendBackable)
                                {
                                    <span class="recordstatus-R">
                                        @(thOfSim != null && thOfSim.ActionCode == "SendBack" ? "[":"")
                                        ส่งกลับให้แก้ไข
                                        @(thOfSim != null && thOfSim.ActionCode == "SendBack" ? "]":"")
                                    </span> 
                                }
                            </td>
                        </tr>
                        }
                    }
                <tr>
                    @if(task != null && task.Completed)
                    {
                        <td>
                            <img src="~/Content/Images/Icon/arrow-31-512.gif" width="16px" 
                                    height="16px" title="กำลังอยู่ในขั้นตอนนี้" /></td>
                        <td colspan="7" style="background: lightgoldenrodyellow">
                            <span style="color: rgb(177, 177, 177); " >สิ้นสุดขั้นตอนการอนุมัติ</span>
                        </td>
                    } else{
                        <td colspan="8" style="background: lightgoldenrodyellow">
                            <span style="color: rgb(177, 177, 177); " >สิ้นสุดขั้นตอนการอนุมัติ</span>
                        </td>
                    }
                </tr>
            </tbody>
        </table> 
    <hr/> 
</div> 